// 数据上报类
class Reporter {
  constructor(options) {
    this.options = options;                            // 存储配置项
    this.queue = [];                                   // 上报数据队列
    this.timer = null;                                // 定时器引用
    this.batchSize = options.batchSize || 10;         // 批量上报的数量阈值
    this.batchTimeout = options.batchTimeout || 0;  // 批量上报的时间间隔
  }

  // 发送数据到上报队列
  send(type, data) {
    const reportData = {
      type,                        // 数据类型（性能/错误）
      data,                       // 具体数据
      appId: this.options.appId,  // 应用标识
      userId: this.options.userId, // 用户标识
      timestamp: Date.now()       // 数据产生时间
    };

    this.queue.push(reportData);  // 将数据添加到队列

    // 当队列达到阈值或首次添加数据时，触发上报
    if (this.queue.length) { //>= this.batchSize
      this.flush();
    } else if (!this.timer) {
      this.timer = setTimeout(() => this.flush(), this.batchTimeout);
    }
  }

  // 执行���据上报
  async flush() {
    if (this.queue.length === 0) return;

    const data = this.queue.slice();     // 复制队列数据
    this.queue = [];                     // 清空队列
    clearTimeout(this.timer);            // 清除定时器
    this.timer = null;

    // 注释掉原来的上报逻辑，改为控制台打印
    try {
      console.group('前端监控上报数据');
      data.forEach(item => {
        const { type, data: itemData } = item;
        
        switch(type) {
          case 'performance':
            console.log('%c性能指标', 'color: blue; font-weight: bold;', itemData);
            break;
          case 'error':
            console.log('%c错误信息', 'color: red; font-weight: bold;', itemData);
            break;
          default:
            console.log('%c其他数据', 'color: gray; font-weight: bold;', itemData);
        }
      });
      console.groupEnd();

      /* 注释原有的上报代码
      const response = await fetch(this.options.reportUrl, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify(data),
        keepalive: true
      });

      if (!response.ok) {
        console.error('上报失败:', response.statusText);
      }
      */
    } catch (error) {
      console.error('数据处理出错:', error);
    }
  }
}

export default Reporter; 